package com.pjedu.nbmalladminsystem.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author 汪洋
 * @Description TODO
 */
@Component
public class AdminLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //1、判断session里面是否存储着用户数据,若存储,则证明该用户处于登录状态,继续后面的业务
        if (null!=request.getSession().getAttribute("adminUser")){
            return true;
        }
        //2、如果没有存储用户数据,就需要让用户访问的页面进入主页,但是用户访问资源的方式是有两种方式的
        //a、直接通过地址栏访问;b、通过ajax的形式来访问
        //因为如果是地址栏访问,若没有登陆信息,我们可以直接操作地址栏回到首页,但是如果是ajax的访问的话,
        //它是只能返回数据的,是不能直接更改地址栏信息的,所以我们在public.js文件中最下面写了个统一的ajax
        //拦截方法,在这里只需要设置访问码是401,那么在public.js文件中的方法就会进行处理让其回到首页
        //2.1、首先拿到访问方式
        String ajaxHeader = request.getHeader("X-Requested-With");// ajax请求特有的请求头
        //2.2、进行判断是否是ajax的请求
        if("XMLHttpRequest".equals(ajaxHeader)) {
            //2.3、如果是ajax的请求,则返回 401 http状态码， 由前端 ajax代码去跳转页面
            response.setStatus(401); // 401 状态码代表 认证不通过
            //2.4、设置一些其他的通用信息
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
        } else {
            //2.5、不是ajax，浏览器直接访问的话，就跳转到 登录页面【首页】
            response.sendRedirect("/");
        }
        return true;
    }
}
